/*
** 抽象文件日志类
*/

#pragma once

#include "abstract_loger.hpp"
#include <condition_variable>
#include <mutex>
#include <queue>

namespace lxz
{

    class file_loger : public abstract_loger
    {
    public:
        file_loger();
        virtual ~file_loger();

        virtual int32_t init(log_level level, const char *file) = 0;

        // 往队列里写日志
        virtual int32_t append(log_level log_level, std::string log) override;

    protected:
        FILE *fp_; // 日志流

        std::atomic_bool enable_flush_;     // 使能flush循环
        std::queue<std::string> in_queue_;  // 输入日志队列
        std::queue<std::string> out_queue_; // 输出日志队列

        std::mutex mutex_;
        std::condition_variable cond_var_;

        // 写日志线程函数
        virtual void flush(void) = 0;
    };

}
